package likou.offer2;

/**
 * @author: 唐小尊
 * @email: 1171702529@qq.com
 * @cate: 2021/09/17 08:48
 */
public class _004 {
    public static void main(String[] args) {
        _004 four = new _004();
        four.singleNumber(new int[]{2, 2, 3, 2});
    }

    public int singleNumber(int[] nums) {
        int p1 = 0;//记录出现一次的情况
        int p2 = 0;//记录出现两次的情况
        //如果某个位，即将出现第三次，则i&p2的该位置为1，需要去掉。
        for (int i : nums) {
            int qq = i & p2;//某个位置达到了3，就去掉p2的这个位置与i的这个位置
            p2 ^= qq;
            i ^= qq;

            int temp = p1;
            p1 = p1 ^ i;
            p2 = p2 ^ (temp & i);
        }
        return p1;
    }
}
